# -*- coding: utf-8 -*-
"""自定义工具类"""
import functools
from flask import current_app
from flask import g
from flask import session

from info.models import User
from flask.ext.wtf.csrf import generate_csrf


def index_class(index):
    """过滤器"""
    if index == 0:
        return 'first'
    elif index == 1:
        return 'second'
    elif index == 2:
        return 'third'
    else:
        return ''


def check_user_login(func):
    # 定义查询用户是否登陆的装饰器，并把查询结果保存在g变量中
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        # 当前用户未登录时，登录 / 注册按钮
        # 当用户已登录时，显示用户头像和昵称，并提供退出入口
        # 1.如果用户已登陆，会在session中有记录，查询到用户id，再去数据库查询数据，传给模板渲染
        user_id = session.get('user_id', None)
        user = None
        if user_id:
            # 已经登陆了
            try:
                user = User.query.get(user_id)
            except Exception as e:
                current_app.logger.error(e)

        g.user = user
        return func(*args, **kwargs)

    return wrapper


def after_request(app):
    @app.after_request
    def after_request(response):
        csrf_token = generate_csrf()
        # 设置cookie将csrf_token传给前端保存
        response.set_cookie("csrf_token", csrf_token)
        return response


